package org.jsola.hr.common;

import lombok.extern.slf4j.Slf4j;
import org.jsola.common.BeanKit;
import org.jsola.hr.provider.ILogProviderService;
import org.jsola.log.constant.ActionType;
import org.jsola.user.core.TokenUser;

/**
 * @author june
 */
@Slf4j
public class HrLogKit {

    /**
     * 保存service日志
     * @param content     日志内容 不能为空
     * @param actionType  @see org.jsola.log.constant.ActionType 如果为null默认是0
     * @param subjectType 业务类型 如果为null默认是system
     * @param subjectId   业务id 如果为null默认是0
     * @param tokenUser   当前用户 如果为null 默认站点id和用户id都是system
     */
    public static void log(String content, Integer actionType, String subjectType, String subjectId, TokenUser tokenUser) {
        try {
            ILogProviderService logProviderService = BeanKit.getBean(ILogProviderService.class);
            if (logProviderService == null) {
                log.error("logProviderService is null");
                return;
            }
            logProviderService.log(content,actionType,subjectType,subjectId,tokenUser);
        } catch (Exception e) {
            log.error("hr保存日志出错了", e);
        }
    }

    /**
     * 保存service日志
     * @param content     日志内容 不能为空
     * @param actionType  @see org.jsola.log.constant.ActionType 如果为null默认是0
     * @param subjectType 业务类型 如果为null默认是system
     * @param subjectId   业务id 如果为null默认是0
     * @param tokenUser   当前用户 如果为null 默认站点id和用户id都是system
     */
    public static void log(String content, Integer actionType, String subjectType, String subjectId, String contentId, TokenUser tokenUser) {
        try {
            ILogProviderService logProviderService = BeanKit.getBean(ILogProviderService.class);
            if (logProviderService == null) {
                log.error("logProviderService is null");
                return;
            }
            logProviderService.log(content,actionType,subjectType,subjectId,contentId,tokenUser);
        } catch (Exception e) {
            log.error("hr保存日志出错了", e);
        }
    }

    /**
     * 保存service日志 subjectId为0
     *
     * @param content     日志内容
     * @param actionType  @see org.jsola.log.constant.ActionType
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void log(String content, Integer actionType, String subjectType, TokenUser tokenUser) {
        log(content, actionType, subjectType, null, tokenUser);
    }

    /**
     * 保存service日志 actionType 为DEFAULT
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param subjectId   业务id
     * @param tokenUser   当前用户
     */
    public static void log(String content, String subjectType, String subjectId, TokenUser tokenUser) {
        log(content, null, subjectType, subjectId, tokenUser);
    }

    /**
     * 保存service日志 actionType 为DEFAULT subjectId为0
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void log(String content, String subjectType, TokenUser tokenUser) {
        log(content, subjectType, null, tokenUser);
    }

    /**
     * 保存service日志 actionType 为DEFAULT subjectId为0 subjectType为system
     *
     * @param content   日志内容
     * @param tokenUser 当前用户
     */
    public static void logSystem(String content, TokenUser tokenUser) {
        log(content, null, tokenUser);
    }

    /**
     * 保存service日志 actionType 为DEFAULT subjectId为0 subjectType为system
     * tokenUser 为system
     *
     * @param content 日志内容
     */
    public static void logSystem(String content) {
        logSystem(content, null);
    }

    /**
     * 保存service日志 actionType为SAVE
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param subjectId   业务id
     * @param tokenUser   当前用户
     */
    public static void logForSave(String content, String subjectType, String subjectId, TokenUser tokenUser) {
        log(content, ActionType.SAVE.getValue(), subjectType, subjectId, tokenUser);
    }

    /**
     * 上面方法的重载加了个公司Id
     */
    public static void logForSave(String content, String subjectType, String subjectId, String companyId, TokenUser tokenUser) {
        log(content, ActionType.SAVE.getValue(), subjectType, subjectId,companyId, tokenUser);
    }

    /**
     * 保存service日志 actionType为DELETE
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param subjectId   业务id
     * @param tokenUser   当前用户
     */
    public static void logForDelete(String content, String subjectType, String subjectId, String companyId, TokenUser tokenUser) {
        log(content, ActionType.DELETE.getValue(), subjectType, subjectId, companyId, tokenUser);
    }

    public static void logForDelete(String content, String subjectType, String subjectId, TokenUser tokenUser) {
        log(content, ActionType.DELETE.getValue(), subjectType, subjectId, tokenUser);
    }

    /**
     * 保存service日志 actionType为UPDATE
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param subjectId   业务id
     * @param tokenUser   当前用户
     */
    public static void logForUpdate(String content, String subjectType, String subjectId, TokenUser tokenUser) {
        log(content, ActionType.UPDATE.getValue(), subjectType, subjectId, tokenUser);
    }

    public static void logForUpdate(String content, String subjectType, String subjectId, String companyId, TokenUser tokenUser) {
        log(content, ActionType.UPDATE.getValue(), subjectType, subjectId, companyId, tokenUser);
    }

    /**
     * 保存service日志 actionType为BATCH
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param subjectId   业务id
     * @param tokenUser   当前用户
     */
    public static void logForBatch(String content, String subjectType, String subjectId, TokenUser tokenUser) {
        log(content, ActionType.BATCH.getValue(), subjectType, subjectId, tokenUser);
    }

    public static void logForBatch(String content, String subjectType, String subjectId, String companyId, TokenUser tokenUser) {
        log(content, ActionType.BATCH.getValue(), subjectType, subjectId, companyId, tokenUser);
    }

    /**
     * 保存service日志 actionType为SELECT
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param subjectId   业务id
     * @param tokenUser   当前用户
     */
    public static void logForSelect(String content, String subjectType, String subjectId, TokenUser tokenUser) {
        log(content, ActionType.SELECT.getValue(), subjectType, subjectId, tokenUser);
    }

    public static void logForSelect(String content, String subjectType, String subjectId, String companyId, TokenUser tokenUser) {
        log(content, ActionType.BATCH.getValue(), subjectType, subjectId, companyId, tokenUser);
    }
    /**
     * 保存service日志 actionType为SAVE subjectId为0
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void logForSave(String content, String subjectType, TokenUser tokenUser) {
        logForSave(content, subjectType, null, tokenUser);
    }

    /**
     * 保存service日志 actionType为DELETE subjectId为0
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void logForDelete(String content, String subjectType, TokenUser tokenUser) {
        logForDelete(content, subjectType, null, tokenUser);
    }

    /**
     * 保存service日志 actionType为UPDATE subjectId为0
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void logForUpdate(String content, String subjectType, TokenUser tokenUser) {
        logForUpdate(content, subjectType, null, tokenUser);
    }

    /**
     * 保存service日志 actionType为BATCH subjectId为0
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void logForBatch(String content, String subjectType, TokenUser tokenUser) {
        logForBatch(content, subjectType, null, tokenUser);
    }

    /**
     * 保存service日志 actionType为SELECT subjectId为0
     *
     * @param content     日志内容
     * @param subjectType 业务类型
     * @param tokenUser   当前用户
     */
    public static void logForSelect(String content, String subjectType, TokenUser tokenUser) {
        logForSelect(content, subjectType, null, tokenUser);
    }
}
